/**
在TypeScript中，枚举类型不仅可以定义一组命名的常量，还可以为这些常量设置自定义值。
  1. 数字枚举
  - 默认情况下，枚举的成员值是从0开始的递增数字。如果需要，可以为枚举成员指定自定义数字值。
  - 例如：
  enum Status {
      Active = 1,   // 指定值为1
      Inactive = 0, // 指定值为0
      Pending = 2   // 指定值为2
  }

  console.log(Status.Active);   // 输出：1
  console.log(Status.Inactive); // 输出：0
  console.log(Status.Pending);   // 输出：2
  2. 字符串枚举
  - 除了数字，枚举成员还可以使用字符串作为值。字符串枚举的每个成员都必须被显式赋值。
  - 例如：
  enum Response {
      Yes = "YES",
      No = "NO",
      Maybe = "MAYBE"
  }

  console.log(Response.Yes);   // 输出："YES"
  console.log(Response.No);    // 输出："NO"
  console.log(Response.Maybe);  // 输出："MAYBE"
  3. 混合枚举
  - TypeScript支持将数字和字符串混合使用，但不推荐这样做，因为这会导致类型不一致。
  - 例如：
  enum MixedEnum {
      No = 0,
      Yes = "YES"
  }

  // 使用时需要注意
  console.log(MixedEnum.No);  // 输出：0
  console.log(MixedEnum.Yes); // 输出："YES"
  4. 反向映射
  - 对于数字枚举，TypeScript会自动生成反向映射，可以通过值获取对应的枚举名称。
  - 例如：
  enum Color {
      Red = 1,
      Green = 2,
      Blue = 4
  }

  console.log(Color[1]); // 输出："Red"
  console.log(Color[2]); // 输出："Green"
  5. 常量枚举
  - 使用  `const enum`  定义常量枚举，常量枚举在编译时会被内联，适用于性能要求较高的场景。常量枚举的成员也可以设置值。
  - 例如：
  const enum Directions {
      Up = 1,
      Down = 2,
      Left = 3,
      Right = 4
  }

  // 编译后会直接替换为对应的数字值
  let direction = Directions.Up; // direction 的值为 1
  6. 总结
  在TypeScript中，可以为枚举类型的成员设置自定义值，包括数字和字符串。通过设置值，开发者能够更好地控制枚举的行为和使用场景。枚举提供了一种清晰且可读的方式来处理相关常量，提高了代码的可维护性和可理解性。
 */
// 定义枚举类型
enum Response {
  Yes = "YES",
  No = "NO",
  Maybe = "MAYBE"
}

enum Direction {
  LEFT = "LEFT",
  RIGHT = "RIGHT",
}

enum Operation {
  Read = 1 << 0,
  Write = 1 << 1,
  foo = 1 << 2,
}

const d1: Direction = Direction.LEFT;

export {}
